#ifndef DFG_H
#define DFG_H


#include <stdbool.h>
//#include "symbol.h"
#include "list.h"
//#include "set.h"


typedef struct dfg{
	struct list_head bbs_head;  // 流图的所有基本块

}dfg_t;


typedef struct basic_block{
    // 基本块加入 dfg 的链表, 构成流图所有的基本块
	struct list_head entry_in_dfg; 
    // 基本块的指令序列
	struct list_head insts_head; 
    // 基本块的前驱 predecessor
	struct list_head prede_head;
    // 基本块的后继   successor
	struct list_head suc_head; 
	bool visited; // 访问标记
	bool reach;   // 块可达标记,不可达块不作为数据流处理对象
	int id; // 编号
}bb_t;

dfg_t *new_dfg(void);
void optimize_funs(void);
void destroy_bbs(struct list_head *head);
#endif